package com.liuwei.spring.cloud.framework.annotations;

import java.lang.annotation.*;

/**
 * @author : evan.liu
 * @version V1.0
 * @Description: 分布式锁注解
 * @date Date : 2022年03月08日 10:34 上午
 * Spring Cachable实现逻辑：https://www.cnblogs.com/liubey/p/spring_cacheable.html
 */
@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(RedisLocks.class)
public @interface RedisLock {
    /**
     * 锁的前缀,进行唯一标识, 如: www:baidu:com:search:
     * @return
     */
    String prefix() default "";

    /**
     * 方法参数的 spel 表达式
     * @return
     */
    String lockKey() default "";

    /**
     * 是: 对list 所有 item.toString 加锁
     * 否: 对list.toString 加锁
     * @return
     */
    boolean lockIterator() default false;

    /**
     * 加锁的预计时长
     * @return
     */
    int expireSeconds() default -1;

    /**
     * 加锁重试的时间间隔
     * @return
     */
    int waitMilliseconds() default 500;

    /**
     * 加锁失败的异常信息
     * @return
     */
    String message() default "系统其他操作正在进行中,请稍后重试";
}

